from typing import List,Dict,Any
from audio_pkg.core.printer.task_printer import QueryTaskPrinter
from abc import ABC,abstractmethod

class QueryPrint(ABC):
    def __init__(self, printer:QueryTaskPrinter,valid_data: List[Dict[str, Any]], invalid_data: List[str]):
        self.printer = printer
        self.valid_data = valid_data
        self.invalid_data = invalid_data

    @abstractmethod
    def print_data(self):
        pass


class QueryPrintQuery(QueryPrint):
        
    def print_data(self):
        if not self.valid_data and not self.invalid_data:
            # 情况 1: valid_data 和 invalid_data 都为空
            self.printer.print_invalid_tasks("没有有效数据，请检查输入的任务id是否正确！")
        elif not self.invalid_data and self.valid_data:
            # 情况 2: invalid_data 为空，valid_data 不为空
            self.printer.print_task_results(self.valid_data, [])
        elif self.valid_data and self.invalid_data:
            # 情况 3: valid_data 和 invalid_data 都不为空
            self.printer.print_task_results(self.valid_data, self.invalid_data)
        elif self.invalid_data and not self.valid_data:
            # 情况 4: invalid_data 不为空，valid_data 为空
            self.printer.print_invalid_tasks("没有有效数据，请检查输入的任务id是否正确！")

class QueryPrintAuto(QueryPrint):

    def print_data(self):
        if not self.valid_data and not self.invalid_data:
            # 情况 1: valid_data 和 invalid_data 都为空
            self.printer.logger.error("没有有效数据，请检查输入的任务id是否正确！")
        elif not self.invalid_data and self.valid_data:
            # 情况 2: invalid_data 为空，valid_data 不为空
            pass
        elif self.valid_data and self.invalid_data:
            # 情况 3: valid_data 和 invalid_data 都不为空
            self.printer.logger.info("无效数据:\n{}".format(self.invalid_data))
        elif self.invalid_data and not self.valid_data:
            # 情况 4: invalid_data 不为空，valid_data 为空
            self.printer.print_invalid_tasks("没有有效数据，请检查输入的任务id是否正确！")